package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCampania;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblPreimplementacion;
import com.mastercard.assets.jpa.TblSubcateg;
import com.mastercard.assets.jpa.TblTarea;
import com.mastercard.assets.jpa.TblTareaPreimplementacion;
import com.mastercard.assets.jpa.TblTipoCampania;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAltaForm;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesForm;
import com.mastercard.assets.web.struts.forms.AssetBorrarForm;
import com.mastercard.assets.web.struts.forms.AssetBuscarForm;
import com.mastercard.assets.web.struts.forms.AssetEditarForm;
import com.mastercard.assets.web.struts.forms.AssetModificarPaquetesForm;
import com.mastercard.assets.web.struts.forms.CampanasPorAutorizarForm;
import com.mastercard.assets.web.struts.forms.GenerarCampanaForm;
import com.mastercard.assets.web.struts.forms.GenerarCampanaRegistrarForm;
import com.mastercard.assets.web.struts.forms.LoginForm;
import com.mastercard.assets.web.util.to.ManejadorPaquetesAsignados;
import com.mastercard.assets.web.util.to.PaqueteAutorizado;
import com.mastercard.assets.web.util.to.UserLogin;

public class ListarCampanasBuscarCampana
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// verifica que el rol en el que esta es banco (2)
		int role = user.getActualRoleId( ) ;
		
		if( role > 2 )
			return mapping.findForward( "RoleNoValido" ) ;
		
		// toma la cveCampania
		int cveCampania = 0 ;
		String cveCampaniaS = request.getParameter( "cveCampania" ) ;
		
		try
		{
			cveCampania = Integer.parseInt( cveCampaniaS ) ;
			
			// en caso de que cveCampania es menor a 1
			if( cveCampania < 1 )
			{
				return mapping.findForward( "NoEligioCampana" ) ;
			}
		}catch( Exception e )
		{
			
		}
		
		TblCampania campania = MasterCardDAO.findCampaignById( cveCampania ) ;
		MasterCardDAO.closeEntityManager( ) ;
		// en caso de null
		if( campania == null )
		{
			return mapping.findForward( "NoExisteCampana" ) ;
		}
		
		// en caso de que si exista
		// lo coloca en el Form
		// crea el form
		CampanasPorAutorizarForm f = new CampanasPorAutorizarForm( ) ;
		
		f.setCampania( campania ) ;
                
                //proceso para obtener info de tareas y su status
                
                // obtiene registros de TblPreimplementacion para la campaña
                List<TblPreimplementacion> preimplementacion =   f.getCampania().getTblPreimplementacions();
                // declara array de tareas vacios para despues pasarlos a la vista
                List<TblTarea> tareasYa = new ArrayList<TblTarea>() , 
                               tareasNo = new ArrayList<TblTarea>() ;
                
                // barre la lista de registros TblPreimplementacion
                for (TblPreimplementacion p : preimplementacion){
                    if ( p.getStatus() != 1 )
                        continue ;
                    
                    // valida que sean del tipo de flujo 3 (ejecucion)
                    if ( p.getTblFlujo().getTipo() == 3 ){
                        // obtiene registros de TblTareaPreimplementacion para la Preimplementacion                        
                        List<TblTareaPreimplementacion> tareaPreimple = p.getTblTareaPreimplementacions();
                        // barre la lista de registros de TblTareaPreimplementacion 
                        for ( TblTareaPreimplementacion tp : tareaPreimple ) {                            
                            
                            if ( tp.getEjecutado() == 1 ){
                                //System.out.println(":::::::TareaYa::::::: " + tp.getTblTarea().getNombre());
                                tareasYa.add(tp.getTblTarea());
                            }
                            else{
                                //System.out.println(":::::::TareaNO::::::: " + tp.getTblTarea().getNombre());
                                tareasNo.add(tp.getTblTarea());
                            }
                            
                        }
                        
                        
                    }
                }
		
		// guarda en el request
		request.setAttribute( "ListarCampanasForm" , f ) ;
                request.setAttribute( "tareasYa" , tareasYa ) ;
                request.setAttribute( "tareasNo" , tareasNo ) ;
		
		// genera el form
		/////////////////
		
		return mapping.findForward( "success" ) ;
	}
	
}
